sql server 2008 r2如何收縮數(shù)據(jù)庫和文件
發(fā)布時間:2016/11/3 10:54:05
1、右擊數(shù)據(jù)庫選擇,打開Files窗口
2、Files窗口,F(xiàn)ile type 選擇 Log,單擊OK完成日志收縮。
按以上方法操作沒有效果,原因是數(shù)據(jù)庫的恢復(fù)模式不是簡單模式,只需要將恢復(fù)模式改為簡單模式即可用以上操作來收縮日志,方便又好用。
將數(shù)據(jù)庫恢復(fù)模式改為簡單模式方法:
1、右擊數(shù)據(jù)庫選擇屬性,彈出窗口如下圖,選擇Options選項,將 Recovery Model 改為 Simple 即可。
按如下方法操作也可收縮日志:
1、當(dāng)數(shù)據(jù)庫恢復(fù)模式為簡單時。使用dbcc shrinkfile (logfile_name,target_size)命令來完成。如
use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m
2、當(dāng)數(shù)據(jù)庫恢復(fù)模式為完全時?梢韵葘(shù)據(jù)庫模式改為簡單模式,再使用上述方法來進行。
use master
alter database mydb set recovery simple
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m
也可以直接備份事務(wù)日志文件后再收縮:
use master
backup log mydb to disk='d:/dd.bak'
use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m;
3、通過分離數(shù)據(jù)庫,然后再刪除事務(wù)日志文件,再附加mdf數(shù)據(jù)文件,也可以達到某種意義上的事務(wù)日志收縮。
以下是有關(guān)日志文摘
對于每一個數(shù)據(jù)庫來講,都需要至少一個事務(wù)日志文件。事務(wù)日志文件是整個數(shù)據(jù)庫的血液,如果沒有事務(wù)日志的話,那么將無法進行任何操作。
事務(wù)日志有什么東西?
事務(wù)日志記錄著在相關(guān)數(shù)據(jù)庫上的操作,同時還存儲數(shù)據(jù)庫恢復(fù)(recovery)的相關(guān)信息。
事務(wù)日志與數(shù)據(jù)庫恢復(fù)(recovery)是密切相關(guān)的,其實數(shù)據(jù)庫在啟動時,便會進行相關(guān)的恢復(fù)(recovery)操作,如下所示。當(dāng)然,在數(shù)據(jù)庫還原時,也可以指定手工恢復(fù)(recovery).任何在數(shù)據(jù)庫上的改變,如果在事務(wù)日志內(nèi)被標(biāo)記為已提交,并用一個LSN(LOG SEQUENCE NUMBER)來標(biāo)識,同時相關(guān)改變就會體現(xiàn)在數(shù)據(jù)文件上,而被標(biāo)記為未提交的改變將不會體現(xiàn)在數(shù)據(jù)文件上。
2010-01-12 18:31:48.72 spid7s Recovery is complete. This is an informationa message only. No user action is required.
事務(wù)日志文件還存儲著數(shù)據(jù)庫需要回滾的相關(guān)信息。在SQL Server數(shù)據(jù)庫上,默認是隱式提交的,也就是說在查詢分析器里面進行的每一個操作,在操作完成后,都是默認已經(jīng)commit,但如果通過指定begin tran 和rollback tran的命令來標(biāo)識事務(wù)時,rollback tran就需要使用事務(wù)日志內(nèi)的相關(guān)信息才可以回滾。當(dāng)然,如果SQL Server遇到相關(guān)錯誤時,如死鎖,那么也會產(chǎn)生一個內(nèi)部回滾,這些都需要用到事務(wù)日志文件。
為什么要收縮事務(wù)日志?
收縮日志的原因有很多種,有些則是考慮空間不足,有些則是應(yīng)用程序限制導(dǎo)致的,一般情況下,是不建議對事務(wù)日志進行其他改變的,如需要控制事務(wù)日志的大小,則可以通過安排事務(wù)日志備份來解決。如果確定事務(wù)日志包含將不再使用的未使用空間,則可以通過減少事務(wù)日志的大小,以便回收過多空間。但這種情況對于一個DBA來講,應(yīng)該要盡量避免。
僅當(dāng)數(shù)據(jù)庫處于聯(lián)機狀態(tài),而且至少一個虛擬日志文件可用時,收縮才會發(fā)生。在某些情況下,直到下一個日志截斷后,才能收縮日志。
事務(wù)日志收縮的原理:
每個事務(wù)日志由多個虛擬日志文件組成(virtual log file).虛擬日志文件沒有固定的大小,也沒有固定的個數(shù)。在創(chuàng)建事務(wù)日志文件或者擴展事務(wù)日志文件時,SQL SERVER便會自動創(chuàng)建合適大小的虛擬日志文件,DBA無法控制虛擬日志文件的大小和個數(shù)。在擴展日志文件后,虛擬文件的大小是現(xiàn)有日志大小和新文件增量大小之和。因此,如果在創(chuàng)建數(shù)據(jù)庫時,對數(shù)據(jù)庫指定了比較小的初始大小,又指定了比較小的日志增長量,隨著事務(wù)日志的自動擴展,虛擬日志文件個數(shù)會越來越多,從而影響了數(shù)據(jù)庫性能。因此,在創(chuàng)建數(shù)據(jù)庫時,盡量指定比較合適的初始事務(wù)日志大小,同時指定合理的事務(wù)日志增長量,這點可以參考數(shù)據(jù)文件的標(biāo)準(zhǔn)。如果大于10G或者更大的話,則指定固定的增長量,如果比較小,則指定按百分比的增長量來進行。